package com.tuzhi.sys.service.impl;

import com.tuzhi.base.jpa.healper.QueryHelper;
import com.tuzhi.base.jpa.repository.BaseRepo;
import com.tuzhi.base.service.impl.AbsBaseService;
import com.tuzhi.common.domain.LoginUserBO;
import com.tuzhi.sys.jpa.entity.SysDeptEntity;
import com.tuzhi.sys.jpa.entity.SysUserEntity;
import com.tuzhi.sys.jpa.repository.SysDeptRepo;
import com.tuzhi.sys.jpa.repository.SysUserRepo;
import com.tuzhi.sys.service.SysDeptService;
import com.tuzhi.util.UserContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class SysDeptServiceImpl extends AbsBaseService<SysDeptEntity, Long> implements SysDeptService {

    @Autowired
    SysDeptRepo repo;
    @Override
    protected BaseRepo getThisRepo() {
        return repo;
    }

//    部门树形结构
    @Override
    public List<SysDeptEntity> getTree() {
        LoginUserBO curLoginUser = UserContext.getUserInfo(true);
        QueryHelper.Builder<SysDeptEntity> builder = new QueryHelper.Builder<>();
        builder.eq(SysDeptEntity::getOrgId, curLoginUser.getOrgId());
        List<SysDeptEntity> all = repo.findAll(builder.build().getWhereConditionBO());
        //根部门
        List<SysDeptEntity> roots=new ArrayList<>();
        for (SysDeptEntity sysDeptEntity : all) {
            if (sysDeptEntity.getPid()==0 || sysDeptEntity.getPid()==null){
                roots.add(sysDeptEntity);
            }
        }
        for (SysDeptEntity root : roots) {
            buildTree(root,all);
        }

        return roots;
    }

    private void buildTree(SysDeptEntity root, List<SysDeptEntity> all) {
            for (SysDeptEntity sysDeptEntity : all) {
                if (sysDeptEntity.getPid()== root.getId()){
                    buildTree(sysDeptEntity,all);
                    root.getChildren().add(sysDeptEntity);
                }
            }
    }
}
